Softwaredesign (auch Softwarekonstruktion) ist der Konstruktionsprozess zur Implementierung einer Software-Lösung. Üblicherweise vollzieht sich die Erarbeitung und Erstellung von Software in einem Softwareentwicklungsprozess, in den ständig immer wieder graduelle Verbesserungen einfließen. Doch gegenüber dem Softwareentwicklungsprozess erfordert die Konstruktion von Software ein abstrakteres Denken auf einer Metaebene zur Programmierarbeit. Softwaredesign ist in aller Regel erforderlich, um die Komplexität, welche die meisten Computerprogramme aufweisen, für die Programmierer handhabbarer zu machen und um zielverfehlendes Programmieren zu vermeiden.